Python 对象类型快速概览

By Ruben Geert van den Berg under SPSS Python Basics

在我们的示例中,您会遇到诸如 Python 列表 (Python list) 或字典 (dict) 对象之类的术语。那么,我们在 Python 中可以找到哪些对象类型?它们的基本属性是什么?下表提供了一个快速概览。

Python 对象类型快速概览

类型 (Type) 含义 (Meaning) 可迭代 (Iterable)? 可变 (Mutable)? 看起来像 (Looks like) 它是什么 (What is it)?
str 字符串 (String) 是 (Yes) 否 (No) apple 0 个或多个字符的序列
list 列表 (List) 是 (Yes) 是 (Yes) [1,2,3] 由位置引用的一系列对象
tuple 元组 (Python tuple) 是 (Yes) 否 (No) (‘apple’,‘banana’) 由位置引用的一系列对象
dict 字典 (Dictionary) 是 (Yes) 是 (Yes) {1:‘apple’,2:‘banana’} 无序的(唯一的)键集合,每个键都有一个值
int 整数 (Integer number) 否 (No) 否 (No) 1 没有小数位的数字
float 浮点数 (Floating point number) 否 (No) 否 (No) 1.0 有小数位的数字
function 函数 (Python function) 否 (No) 否 (No) def myfunction(): 一段命名的代码,它接受零个或多个参数并执行某些操作
module 模块 (Python module) 否 (No) 否 (No) (带有 .py 扩展名的文本文件) 一个或多个 Python 文件,定义函数和/或其他对象。
bool 布尔值 (Boolean) 否 (No) 否 (No) True / False 只能指示 True (真) 或 False (假) 的对象
range 范围 (Python range) 是 (Yes) 否 (No) range(0, 10) 一系列整数
NoneType 空对象 (Empty object) 否 (No) 否 (No) None 没有类型的空对象

Python 中“可迭代 (Iterable)”是什么意思?

Python 对象如果是可迭代的 (iterable),则您可以对其进行循环。例如,您可以循环遍历 Python 字符串对象中包含的字符。但是,您不能循环遍历 Python 整数 (int) 对象。

是否可以循环遍历对象仅取决于对象的类型,而不取决于其内容。例如,您可以循环遍历一个空列表,如下所示。

***创建字符串对象 (可迭代) 并循环遍历其字符。**
begin program python3.
myString = '13579'
for char in myString:
  print(char)
end program.

***整数对象不可迭代。**
begin program python3.
myInt = 13579
for char in myInt:
  print(char) # TypeError: 'int' object is not iterable
end program.

***Python 列表是可迭代的,即使是空的。**
begin program python3.
myList = []
for elem in myList:
  print(elem)
end program.

Python 中“可变 (Mutable)”是什么意思?

Python 对象如果是可变的 (mutable),则可以更改它们的值。 令人困惑的是,_看起来_您可以更改字符串对象的值。 但是,这样做只是创建了一个全新的字符串对象,该对象具有相同的名称,但其值与原始字符串对象的值(可能)不同。

下面的示例通过检查修改某些字符串对象之前和之后的 Python IDs (id) 来证明这一点。

***更改字符串对象的值会创建新的字符串对象。**
begin program python3.
myString = 'apple'
print(myString) # apple
print(id(myString)) # 51135968
myString += 's'
print(myString) # apples
print(id(myString)) # 51043720
end program.

***更改列表对象的元素不会产生新的列表对象。**
begin program python3.
myList = ['apple','banana','cherry']
print(myList) # ['apple', 'banana', 'cherry']
print(id(myList)) # 45378824
myList.append('durian')
print(myList) # ['apple', 'banana', 'cherry', 'durian']
print(id(myList)) # 45378824
end program.

Python 字符串 (String) 对象

Python 字符串 (string) 仅包含 0 个或(通常)更多字符。 有关 Python 字符串方法的详细概述,请阅读 Python 字符串方法概述。 以下语法演示了一些最基本的基础知识。

***创建 Python 字符串对象并检查它。**
begin program python3.
myString = 'apple'
print(type(myString)) # <type 'str'>
print(myString) # apple
end program.

***从字符串中检索最后一个元素(字符)。**
begin program python3.
print(myString[-1]) # e
end program.

为什么 Python 字符串对象如此重要? 嗯,在 SPSS 中使用 Python 的一个主要目标是创建(大量的)SPSS 语法 来完成若干任务。 这样的语法被创建为一个或多个 Python 字符串对象,然后传递到 SPSS 中运行。

Python 列表 (List) 对象

Python 列表 (list) 对象由 0 个或(通常)更多个元素组成,这些元素用逗号分隔并用方括号括起来。

***创建 Python 列表对象。**
begin program python3.
myList = ['apple','banana','cherry']
print(type(myList)) # <class 'list'>
print(myList) # ['apple','banana','cherry']
end program.

***按索引从列表中检索项目。**
begin program python3.
print(myList[0]) # apple
end program.

列表 (List) 对象类似于元组 (Tuple),只不过它们是可编辑的(“可变的”)。 因此,许多方法可用于列表。 我们可能会在以后的教程中快速概述这些方法。

Python 元组 (Tuple) 对象

Python 元组 (tuple) 由 0 个或更多个元素组成,这些元素用括号括起来并用逗号分隔。 以下语法演示了一些基本知识。

***创建并检查元组。**
begin program python3.
myTuple = ('apple','banana','cherry')
print(type(myTuple)) # <class 'tuple'>
print(myTuple) # ('apple','banana','cherry')
end program.

***从元组中提取最后一个元素。**
begin program python3.
print(myTuple[-1]) # cherry
end program.

Python 元组 (tuple) 类似于 Python 列表 (list) 对象,只不过它们不可编辑(“不可变的”)。 我们通常只使用方括号从它们中提取元素。

Python 字典 (Dictionary) 对象

Python 字典 (dict) 对象由 0 个或(通常)更多个键值对组成。 只能从其键中检索值,而不能从任何索引中检索值,如下所示。

Python 字典 (dict) 键(但不是值)必须是唯一的。 键和值通常是 Python 字符串或整数对象,但从技术上讲,它们可以是任何类型,包括:

  • 列表 (lists)
  • 元组 (tuples)
  • 字典 (dictionaries)
  • 或任何其他 Python 对象。

以下语法演示了一些 Python 字典 (dict) 的基本知识。

***创建 Python 字典对象。**
begin program python3.
myDict = {'a':'apple','b':'banana','c':'cherry'}
print(type(myDict)) # <class 'dict'>
print(myDict) # {'b': 'banana', 'a': 'apple', 'c': 'cherry'}
end program.

***从字典键中检索字典值。**
begin program python3.
print(myDict['a']) # apple
end program.

***注意:您无法从索引中检索字典值。**
begin program python3.
print(myDict[0]) # ... KeyError ...
end program.

***循环遍历字典键和值。**
begin program python3.
for key,value in myDict.items():
  print(key,value)
end program.

Python 整数 (Integer) 对象

Python 中的 “int” 表示整数:没有小数位的数字。

***创建并检查元组。**
begin program python3.
myInt = 5
print(type(myInt)) # <class 'int'>
print(myInt) # 5
end program.

***注意 / 运算符表示 int/float 的除法。**
begin program python3.
print(myInt / 2)
end program.

请注意,带有 小数位的数字在 Python 中是 浮点数 (float) 或十进制数。

Python 浮点数 (Float) 对象

带有小数位的数字是 Python 中的浮点数 (float) 或十进制数。 以下语法演示了一些基本知识。

***创建 Python 浮点数对象。**
begin program python3.
myFloat = 3.0
print(type(myFloat)) # <class 'float'>
print(myFloat) # 3.0
end program.

***对于浮点数,+ 运算符表示数值加法。**
begin program python3.
print(myFloat + 1) # 1.5
end program.

Python 中的浮点数 (float) 是单精度浮点数。 相比之下,SPSS 中的_所有_数字都是双精度浮点数。

Python 函数 (Functions)

Python 中的函数 (function) 由一行或多行 Python 代码组成。 这些通常完成在几种不同情况下都需要的通用任务。 下面显示了一个最小的例子。

***定义 Python 函数。**
begin program python3.
def myFunction(myName = 'Ruben'):
  print('Hello! My name is {}'.format(myName))
end program.

***检查函数。**
begin program python3.
print(type(myFunction)) # <class 'function'>
print(myFunction) # <function myFunction at 0x00000000030A3978>
end program.

***运行带有(不带)参数的函数。**
begin program python3.
myFunction() # Hello! My name is Ruben
myFunction(myName = 'Chrissy') # Hello! My name is Chrissy
end program.

请注意,此函数最多接受 1 个参数:myName。 如果未传递任何参数,则默认为 “Ruben”。

在 Python 和其他编程语言中,函数 (function) 对于使代码更短、更易于管理非常有用:我们基本上将大量代码分解为小的构建块,我们可以单独调整和纠正这些构建块。

我们将在其中定义和使用 Python 函数的一课是 SPSS - 使用 Python 克隆变量

Python 模块 (Modules)

Python 模块 (module) 基本上由一个或多个包含 Python 代码的文本文件组成,这些文本文件带有 .py 扩展名。

***导入并检查模块。**
begin program python3.
import os
print(type(os)) # <class 'module'>
print(os) # <module 'os' from 'C:\\\Program
Files\\\IBM\\\SPSS\\\Statistics\\\Python3\\\lib\\\os.py'>
end program.

Python 模块 (module) 通常定义与特定任务相关的类和函数,例如:

  • 使用正则表达式(Python re 模块);
  • 与 Excel 文件交互(openpyxl 模块);
  • 创建、移动、复制或删除文件和/或文件夹(Python os 模块)。

我们将在 SPSS - 使用 Python 克隆变量 中创建一些非常简单的 SPSS Python 模块 (module)。

Python 布尔 (Boolean) 对象

布尔 (Boolean) 对象只是 True (真) 或 False (假)。 它们用于指定您是否要执行某些任务。 此外,条件会隐式地产生布尔值(如果满足条件,则为 True (真),否则为 False (假))。

***创建并检查 Python 布尔对象。**
begin program python3.
myBoolean = True
print(type(myBoolean)) # <class 'bool'>
print(myBoolean) # True
end program.

***在 IF 语句中使用布尔值。**
begin program python3.
if myBoolean:
  print('Yes!')
else:
  print('No!')
end program.

***IF 语句中的隐式布尔值。**
begin program python3.
if 'a' in 'banana':
  print('Yes!')
else:
  print('No!')
end program.

***使用布尔值作为函数参数。**
begin program python3.
myList = [5,2,8,1,9]
print(sorted(myList,reverse = True)) # [9, 8, 5, 2, 1]
end program.

Python 范围 (Range) 对象

Python 范围 (range) 对象在循环时会创建一系列连续整数。 请注意,range(10) 会产生 0 到 9。对于 1 到 10,请使用 range(1,11)。

***创建并检查范围对象。**
begin program python3.
myRange = range(10)
print(type(myRange)) # <class 'range'>
print(myRange) # range(0, 10)
end program.

***循环遍历数字 1 - 10**
begin program python3.
for myInt in range(1,11):
  print(myInt)
end program.

Python NoneType 对象

Python 中的 NoneType 对象指示已声明但尚未具有任何值的空对象。

***创建并检查 NoneType 对象。**
begin program python3.
myNone = None
print(type(myNone)) # <class 'NoneType'>
print(myNone) # None
end program.

使用 spssdata 模块读取 SPSS 数据值时,缺失值 通常会导致 Python 中出现 NoneType 对象。 此外,可选参数有时在 Python 函数中将 None 作为其默认值。